diff --git a/drivers/power/axp152.c b/drivers/power/axp152.c
index cd07275..c4b3fe5 100644
--- a/drivers/power/axp152.c
+++ b/drivers/power/axp152.c
@@ -75,7 +75,7 @@
 		return rc;
 
 	if (ver != 0x05)
-		return -1;
+		return -EINVAL;
 
 	return 0;
 }
diff --git a/drivers/power/axp209.c b/drivers/power/axp209.c
index 731b75e..4b25ef2 100644
--- a/drivers/power/axp209.c
+++ b/drivers/power/axp209.c
@@ -158,7 +158,7 @@
 	ver &= 0x0f;
 
 	if (ver != 0x1)
-		return -1;
+		return -EINVAL;
 
 	/* Mask all interrupts */
 	for (i = AXP209_IRQ_ENABLE1; i <= AXP209_IRQ_ENABLE5; i++) {
diff --git a/drivers/power/battery/bat_trats2.c b/drivers/power/battery/bat_trats2.c
index 57221ad..6329e02 100644
--- a/drivers/power/battery/bat_trats2.c
+++ b/drivers/power/battery/bat_trats2.c
@@ -18,7 +18,7 @@
 	struct power_battery *p_bat = bat->pbat;
 
 	if (bat->chrg->chrg_state(p_bat->chrg, PMIC_CHARGER_ENABLE, 450))
-		return -1;
+		return -EINVAL;
 
 	return 0;
 }
diff --git a/drivers/power/exynos-tmu.c b/drivers/power/exynos-tmu.c
index b9968c2..6a66267 100644
--- a/drivers/power/exynos-tmu.c
+++ b/drivers/power/exynos-tmu.c
@@ -190,7 +190,7 @@
 				      COMPAT_SAMSUNG_EXYNOS_TMU);
 	if (node < 0) {
 		debug("EXYNOS_TMU: No node for tmu in device tree\n");
-		return -1;
+		return -ENODEV;
 	}
 
 	/*
@@ -202,7 +202,7 @@
 	addr = fdtdec_get_addr(blob, node, "reg");
 	if (addr == FDT_ADDR_T_NONE) {
 		debug("%s: Missing tmu-base\n", __func__);
-		return -1;
+		return -ENODEV;
 	}
 	info->tmu_base = (struct exynos5_tmu_reg *)addr;
 
@@ -246,11 +246,11 @@
 
 	if (error) {
 		debug("fail to get tmu node properties\n");
-		return -1;
+		return -EINVAL;
 	}
 #else
 	/* Non DT support may never be added. Just in case  */
-	return -1;
+	return -ENODEV;
 #endif
 
 	return 0;
diff --git a/drivers/power/fuel_gauge/fg_max17042.c b/drivers/power/fuel_gauge/fg_max17042.c
index 154ca6a..e433494 100644
--- a/drivers/power/fuel_gauge/fg_max17042.c
+++ b/drivers/power/fuel_gauge/fg_max17042.c
@@ -199,7 +199,7 @@
 
 	if (pmic_probe(p)) {
 		puts("Can't find max17042 fuel gauge\n");
-		return -1;
+		return -ENODEV;
 	}
 
 	ret |= pmic_reg_read(p, MAX17042_VFSOC, &val);
@@ -224,7 +224,7 @@
 
 	if (pmic_probe(p)) {
 		puts("Can't find max17042 fuel gauge\n");
-		return -1;
+		return -ENODEV;
 	}
 
 	ret |= pmic_reg_read(p, MAX17042_STATUS, &val);
diff --git a/drivers/power/mfd/fg_max77693.c b/drivers/power/mfd/fg_max77693.c
index 4519fed..df15508 100644
--- a/drivers/power/mfd/fg_max77693.c
+++ b/drivers/power/mfd/fg_max77693.c
@@ -52,7 +52,7 @@
 
 	if (pmic_probe(p)) {
 		puts("Can't find max77693 fuel gauge\n");
-		return -1;
+		return -ENODEV;
 	}
 
 	ret = max77693_get_soc(&pb->bat->state_of_chrg);
@@ -74,7 +74,7 @@
 
 	if (pmic_probe(p)) {
 		puts("Can't find max77693 fuel gauge\n");
-		return -1;
+		return -ENODEV;
 	}
 
 	ret = pmic_reg_read(p, MAX77693_STATUS, &val);
diff --git a/drivers/power/mfd/pmic_max77693.c b/drivers/power/mfd/pmic_max77693.c
index 6b28e28..c63390e 100644
--- a/drivers/power/mfd/pmic_max77693.c
+++ b/drivers/power/mfd/pmic_max77693.c
@@ -16,7 +16,7 @@
 	unsigned int val;
 
 	if (pmic_probe(p))
-		return -1;
+		return -ENODEV;
 
 	/* unlock write capability */
 	val = MAX77693_CHG_UNLOCK;
@@ -27,13 +27,13 @@
 		pmic_reg_read(p, MAX77693_CHG_CNFG_00, &val);
 		val &= ~0x01;
 		pmic_reg_write(p, MAX77693_CHG_CNFG_00, val);
-		return -1;
+		return -ENOTSUPP;
 	}
 
 	if (current < CHARGER_MIN_CURRENT || current > CHARGER_MAX_CURRENT) {
 		printf("%s: Wrong charge current: %d [mA]\n",
 		       __func__, current);
-		return -1;
+		return -EINVAL;
 	}
 
 	/* set charging current */
@@ -59,7 +59,7 @@
 	unsigned int val;
 
 	if (pmic_probe(p))
-		return -1;
+		return -ENODEV;
 
 	pmic_reg_read(p, MAX77693_CHG_INT_OK, &val);
 
diff --git a/drivers/power/palmas.c b/drivers/power/palmas.c
index 4f9a62c..c813b21 100644
--- a/drivers/power/palmas.c
+++ b/drivers/power/palmas.c
@@ -47,20 +47,23 @@
 	u8 val = 0;
 
 #if defined(CONFIG_DRA7XX)
+	int ret;
 	/*
 	 * Currently valid for the dra7xx_evm board:
 	 * Set TPS659038 LDO1 to 3.0 V
 	 */
 	val = LDO_VOLT_3V0;
-	if (palmas_i2c_write_u8(TPS65903X_CHIP_P1, LDO1_VOLTAGE, val)) {
+	ret = palmas_i2c_write_u8(TPS65903X_CHIP_P1, LDO1_VOLTAGE, val);
+	if (ret) {
 		printf("tps65903x: could not set LDO1 voltage.\n");
-		return 1;
+		return ret;
 	}
 	/* TURN ON LDO1 */
 	val = RSC_MODE_SLEEP | RSC_MODE_ACTIVE;
-	if (palmas_i2c_write_u8(TPS65903X_CHIP_P1, LDO1_CTRL, val)) {
+	ret = palmas_i2c_write_u8(TPS65903X_CHIP_P1, LDO1_CTRL, val);
+	if (ret) {
 		printf("tps65903x: could not turn on LDO1.\n");
-		return 1;
+		return ret;
 	}
 	return 0;
 #else
diff --git a/drivers/power/pmic/pmic_hi6553.c b/drivers/power/pmic/pmic_hi6553.c
index 0af7987..b2346b6 100644
--- a/drivers/power/pmic/pmic_hi6553.c
+++ b/drivers/power/pmic/pmic_hi6553.c
@@ -26,7 +26,7 @@
 int pmic_reg_write(struct pmic *p, u32 reg, u32 val)
 {
 	if (check_reg(p, reg))
-		return -1;
+		return -EINVAL;
 
 	hi6553_writeb(reg, (uint8_t)val);
 
@@ -36,7 +36,7 @@
 int pmic_reg_read(struct pmic *p, u32 reg, u32 *val)
 {
 	if (check_reg(p, reg))
-		return -1;
+		return -EINVAL;
 
 	*val = (u32)hi6553_readb(reg);
 
diff --git a/drivers/power/pmic/pmic_max77686.c b/drivers/power/pmic/pmic_max77686.c
index 93c8d2b..8e65331 100644
--- a/drivers/power/pmic/pmic_max77686.c
+++ b/drivers/power/pmic/pmic_max77686.c
@@ -67,14 +67,14 @@
 
 	if (ldo < 1 || ldo > 26) {
 		printf("%s: %d is wrong ldo number\n", __func__, ldo);
-		return -1;
+		return -EINVAL;
 	}
 
 	adr = MAX77686_REG_PMIC_LDO1CTRL1 + ldo - 1;
 	hex = max77686_ldo_volt2hex(ldo, uV);
 
 	if (!hex)
-		return -1;
+		return -EINVAL;
 
 	ret = pmic_reg_read(p, adr, &val);
 	if (ret)
@@ -120,7 +120,7 @@
 
 	if (ldo < 1 || 26 < ldo) {
 		printf("%s: %d is wrong ldo number\n", __func__, ldo);
-		return -1;
+		return -EINVAL;
 	}
 
 	adr = MAX77686_REG_PMIC_LDO1CTRL1 + ldo - 1;
@@ -161,7 +161,7 @@
 	if (mode == 0xff) {
 		printf("%s: %d is not supported on LDO%d\n",
 		       __func__, opmode, ldo);
-		return -1;
+		return -ENOTSUPP;
 	}
 
 	ret = pmic_reg_read(p, adr, &val);
@@ -182,7 +182,7 @@
 	size = ARRAY_SIZE(max77686_buck_addr);
 	if (buck >= size) {
 		printf("%s: %d is wrong buck number\n", __func__, buck);
-		return -1;
+		return -EINVAL;
 	}
 
 	adr = max77686_buck_addr[buck];
@@ -238,7 +238,7 @@
 	if (mode == 0xff) {
 		printf("%s: %d is not supported on BUCK%d\n",
 		       __func__, opmode, buck);
-		return -1;
+		return -ENOTSUPP;
 	}
 
 	ret = pmic_reg_read(p, adr, &val);
@@ -271,20 +271,20 @@
 	if (node < 0) {
 		debug("PMIC: No node for PMIC Chip in device tree\n");
 		debug("node = %d\n", node);
-		return -1;
+		return -ENODEV;
 	}
 
 	parent = fdt_parent_offset(blob, node);
 	if (parent < 0) {
 		debug("%s: Cannot find node parent\n", __func__);
-		return -1;
+		return -ENODEV;
 	}
 
 	/* tmp since p->bus is unsigned */
 	tmp = i2c_get_bus_num_fdt(parent);
 	if (tmp < 0) {
 		debug("%s: Cannot find I2C bus\n", __func__);
-		return -1;
+		return -ENODEV;
 	}
 	p->bus = tmp;
 	p->hw.i2c.addr = fdtdec_get_int(blob, node, "reg", 9);
diff --git a/drivers/power/pmic/pmic_max8997.c b/drivers/power/pmic/pmic_max8997.c
index a36a9a0..32afb3f 100644
--- a/drivers/power/pmic/pmic_max8997.c
+++ b/drivers/power/pmic/pmic_max8997.c
@@ -33,7 +33,7 @@
 	u32 val = 0;
 
 	if (pmic_probe(p))
-		return -1;
+		return -ENODEV;
 
 	if (state == PMIC_CHARGER_DISABLE) {
 		puts("Disable the charger.\n");
@@ -41,13 +41,13 @@
 		val &= ~(MBCHOSTEN | VCHGR_FC);
 		pmic_reg_write(p, MAX8997_REG_MBCCTRL2, val);
 
-		return -1;
+		return -ENOTSUPP;
 	}
 
 	if (current < CHARGER_MIN_CURRENT || current > CHARGER_MAX_CURRENT) {
 		printf("%s: Wrong charge current: %d [mA]\n",
 		       __func__, current);
-		return -1;
+		return -EINVAL;
 	}
 
 	fc = (current - CHARGER_MIN_CURRENT) / CHARGER_CURRENT_RESOLUTION;
@@ -71,7 +71,7 @@
 	u32 val;
 
 	if (pmic_probe(p))
-		return -1;
+		return -ENODEV;
 
 	pmic_reg_read(p, MAX8997_REG_STATUS4, &val);
 
diff --git a/drivers/power/power_core.c b/drivers/power/power_core.c
index fe1f316..b72286d 100644
--- a/drivers/power/power_core.c
+++ b/drivers/power/power_core.c
@@ -23,7 +23,7 @@
 	if (reg >= p->number_of_regs) {
 		printf("<reg num> = %d is invalid. Should be less than %d\n",
 		       reg, p->number_of_regs);
-		return -1;
+		return -EINVAL;
 	}
 
 	return 0;
@@ -34,7 +34,7 @@
 	u32 val;
 
 	if (pmic_reg_read(p, reg, &val))
-		return -1;
+		return -ENOTSUPP;
 
 	if (on)
 		val |= out;
@@ -42,7 +42,7 @@
 		val &= ~out;
 
 	if (pmic_reg_write(p, reg, val))
-		return -1;
+		return -ENOTSUPP;
 
 	return 0;
 }
@@ -59,7 +59,7 @@
 
 	if (!p) {
 		puts("Wrong PMIC name!\n");
-		return -1;
+		return -ENODEV;
 	}
 
 	pmic_show_info(p);
diff --git a/drivers/power/power_i2c.c b/drivers/power/power_i2c.c
index 0dcf9fe..dd22ece 100644
--- a/drivers/power/power_i2c.c
+++ b/drivers/power/power_i2c.c
@@ -19,9 +19,10 @@
 int pmic_reg_write(struct pmic *p, u32 reg, u32 val)
 {
 	unsigned char buf[4] = { 0 };
+	int ret;
 
 	if (check_reg(p, reg))
-		return -1;
+		return -EINVAL;
 
 	I2C_SET_BUS(p->bus);
 
@@ -51,27 +52,26 @@
 		break;
 	default:
 		printf("%s: invalid tx_num: %d", __func__, pmic_i2c_tx_num);
-		return -1;
+		return -EINVAL;
 	}
 
-	if (i2c_write(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num))
-		return -1;
-
-	return 0;
+	return i2c_write(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num);
 }
 
 int pmic_reg_read(struct pmic *p, u32 reg, u32 *val)
 {
 	unsigned char buf[4] = { 0 };
 	u32 ret_val = 0;
+	int ret;
 
 	if (check_reg(p, reg))
-		return -1;
+		return -EINVAL;
 
 	I2C_SET_BUS(p->bus);
 
-	if (i2c_read(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num))
-		return -1;
+	ret = i2c_read(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num);
+	if (ret)
+		return ret;
 
 	switch (pmic_i2c_tx_num) {
 	case 3:
@@ -93,7 +93,7 @@
 		break;
 	default:
 		printf("%s: invalid tx_num: %d", __func__, pmic_i2c_tx_num);
-		return -1;
+		return -EINVAL;
 	}
 	memcpy(val, &ret_val, sizeof(ret_val));
 
@@ -106,7 +106,7 @@
 	debug("Bus: %d PMIC:%s probed!\n", p->bus, p->name);
 	if (i2c_probe(pmic_i2c_addr)) {
 		printf("Can't find PMIC:%s\n", p->name);
-		return -1;
+		return -ENODEV;
 	}
 
 	return 0;
diff --git a/drivers/power/power_spi.c b/drivers/power/power_spi.c
index 1e55446..ef8531d 100644
--- a/drivers/power/power_spi.c
+++ b/drivers/power/power_spi.c
@@ -27,14 +27,14 @@
 					p->hw.spi.mode);
 
 		if (!slave)
-			return -1;
+			return -ENODEV;
 	}
 
 	if (check_reg(p, reg))
-		return -1;
+		return -EINVAL;
 
 	if (spi_claim_bus(slave))
-		return -1;
+		return -EBUSY;
 
 	pmic_tx = p->hw.spi.prepare_tx(reg, val, write);
 
@@ -59,21 +59,15 @@
 
 err:
 	spi_release_bus(slave);
-	return -1;
+	return -ENOTSUPP;
 }
 
 int pmic_reg_write(struct pmic *p, u32 reg, u32 val)
 {
-	if (pmic_reg(p, reg, &val, 1))
-		return -1;
-
-	return 0;
+	return pmic_reg(p, reg, &val, 1);
 }
 
 int pmic_reg_read(struct pmic *p, u32 reg, u32 *val)
 {
-	if (pmic_reg(p, reg, val, 0))
-		return -1;
-
-	return 0;
+	return pmic_reg(p, reg, val, 0);
 }
diff --git a/drivers/power/tps6586x.c b/drivers/power/tps6586x.c
index 8650983..f50c4d1 100644
--- a/drivers/power/tps6586x.c
+++ b/drivers/power/tps6586x.c
@@ -97,14 +97,14 @@
 	ctrl1 = tps6586x_read(SUPPLY_CONTROL1);
 	ctrl2 = tps6586x_read(SUPPLY_CONTROL2);
 	if (ctrl1 == -1 || ctrl2 == -1)
-		return -1;
+		return -ENOTSUPP;
 
 	/* Figure out whether V1 or V2 is selected */
 	is_v2 = (ctrl1 | ctrl2) & CTRL_SM0_SUPPLY2;
 	*sm0 = tps6586x_read(is_v2 ? SM0_VOLTAGE_V2 : SM0_VOLTAGE_V1);
 	*sm1 = tps6586x_read(is_v2 ? SM1_VOLTAGE_V2 : SM1_VOLTAGE_V1);
 	if (*sm0 == -1 || *sm1 == -1)
-		return -1;
+		return -ENOTSUPP;
 
 	return 0;
 }
@@ -129,7 +129,7 @@
 	/* write v1, v2 and rate, then trigger */
 	if (tps6586x_write(reg, buff, 3) ||
 	    tps6586x_write(SUPPLY_CONTROL1, &control_bit, 1))
-		return -1;
+		return -ENOTSUPP;
 
 	return 0;
 }
@@ -177,7 +177,7 @@
 	/* get current voltage settings */
 	if (read_voltages(&sm0, &sm1)) {
 		debug("%s: Cannot read voltage settings\n", __func__);
-		return -1;
+		return -EINVAL;
 	}
 
 	/*
@@ -189,7 +189,7 @@
 	if (min_sm0_over_sm1 != -1 && sm0 < sm1 + min_sm0_over_sm1) {
 		debug("%s: SM0 is %d, SM1 is %d, but min_sm0_over_sm1 is %d\n",
 		      __func__, sm0, sm1, min_sm0_over_sm1);
-		return -1;
+		return -EINVAL;
 	}
 
 	/*
@@ -240,7 +240,7 @@
 	}
 	debug("%d-%d   %d-%d   done\n", sm0, sm0_target, sm1, sm1_target);
 
-	return bad ? -1 : 0;
+	return bad ? -EINVAL : 0;
 }
 
 int tps6586x_init(struct udevice *dev)
